﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DTO_MechSysWeb;
using BLL_MechSysWeb;
using System.Web.Security;

namespace WEB_MechSysWeb.Paginas_Logado
{
    public partial class ClientePerfilDados : System.Web.UI.Page
    {
        DTOCliente dtoCliente = new DTOCliente();
        DTOEndereco dtoEndereco = new DTOEndereco();
        DTOVeiculo dtoVeiculo = new DTOVeiculo();
        DTOUnidadeFederal dtoUnidadeFederal = new DTOUnidadeFederal();
        BLLUtilidades bllUtilidades = new BLLUtilidades();
        BLLCliente bllCliente = new BLLCliente();
        BLLEndereco bllEndereco = new BLLEndereco();
        BLLVeiculo bllVeiculo = new BLLVeiculo();
        BLLUnidadeFederal bllUnidadeFederal = new BLLUnidadeFederal();
        MembershipUser memberShipUser;
        static int clienteID, enderecoID;
        static string userID, ImgTipo;
        static byte[] ImgDados;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack) // Cada postback gera um captcha
            {
                Habilitar(false);
                PreencherDados();
            }

            try
            {
                memberShipUser = Membership.GetUser(User.Identity.Name);
                if (memberShipUser != null)
                {
                    if (Roles.IsUserInRole("Cliente"))
                    {
                        userID = memberShipUser.ProviderUserKey.ToString();

                    }
                    if (Roles.IsUserInRole("Administrador"))
                    {

                        Response.Redirect("~/Paginas_Administrador/PaginaPrincipalAdm.aspx");
                    }
                }
                else
                {
                    Response.Redirect("~/Paginas_Publico/PagLogin.aspx");
                }
            }
            catch (Exception)
            {
                Response.Redirect("~/Paginas_Publico/PagLogin.aspx");
            }

            List<DTOUnidadeFederal> lstEstados = bllUnidadeFederal.BuscarEstadosCadastrados();

            foreach (DTOUnidadeFederal dtoUnidadeFederal in lstEstados)
            {
                if (dtoUnidadeFederal != null)
                {
                    ddlEstado.Items.Add(new ListItem(dtoUnidadeFederal.Nome, dtoUnidadeFederal.UFID.ToString()));
                }

            }

        }


        public void PreencherDados()
        {
            try
            {
                memberShipUser = Membership.GetUser();
                userID = memberShipUser.ProviderUserKey.ToString();

                dtoCliente = bllCliente.BuscarClientePorUserID(userID);

                clienteID = dtoCliente.ClienteID;
                txtNome.Text = dtoCliente.Nome;
                txtSobrenome.Text = dtoCliente.Sobrenome;
                rblSexo.SelectedValue = dtoCliente.Sexo.ToString();
                txtCPF.Text = dtoCliente.CPF;
                txtDataNascimento.Text = dtoCliente.DataNascimento.ToShortDateString();
                txtTelefone.Text = dtoCliente.Telefone;
                txtCelular.Text = dtoCliente.Celular;
                txtEmail.Text = dtoCliente.Email;
                txtLoginCad.Text = dtoCliente.Login;
                enderecoID = dtoCliente.EnderecoID;
                ImgDados = dtoCliente.ImagemPerfil;
                ImgTipo = dtoCliente.ImagemTipo;

                dtoEndereco = bllEndereco.BuscarEnderecoPorEnderecoID(enderecoID);

                txtRua.Text = dtoEndereco.Rua;
                txtNumero.Text = dtoEndereco.Numero;
                txtBairro.Text = dtoEndereco.Bairro;
                txtComplemento.Text = dtoEndereco.Complemento;
                txtCidade.Text = dtoEndereco.Cidade;
                ddlEstado.SelectedValue = dtoEndereco.Estado.ToString();
                txtCEP.Text = dtoEndereco.CEP;

                ckbInformacoes.Checked = dtoCliente.Informacoes;
            }
            catch (Exception)
            {
                Mensagem.ExibirEmUP("Não foi possível carregar dados!");
            }

        }

        public void LimparCampos()
        {
            clienteID = 0;
            txtNome.Text = string.Empty;
            txtSobrenome.Text = string.Empty;
            txtCPF.Text = string.Empty;
            txtDataNascimento.Text = string.Empty;
            txtTelefone.Text = string.Empty;
            txtCelular.Text = string.Empty;
            txtEmail.Text = string.Empty;
            txtLoginCad.Text = string.Empty;
            txtCEP.Text = string.Empty;
            txtRua.Text = string.Empty;
            txtNumero.Text = string.Empty;
            txtComplemento.Text = string.Empty;
            txtBairro.Text = string.Empty;
            txtCidade.Text = string.Empty;
            ckbInformacoes.Checked = false;
            enderecoID = 0;
            userID = null;
            ImgTipo = null;
            ImgDados = null;

            PreencherDados();
        }

        public void Habilitar(bool status)
        {
            txtNome.Enabled = status;
            txtSobrenome.Enabled = status;
            txtDataNascimento.Enabled = status;
            txtTelefone.Enabled = status;
            txtCelular.Enabled = status;
            txtEmail.Enabled = status;
            txtCEP.Enabled = status;
            txtRua.Enabled = status;
            txtNumero.Enabled = status;
            txtComplemento.Enabled = status;
            txtBairro.Enabled = status;
            txtCidade.Enabled = status;
            ddlEstado.Enabled = status;
            ckbInformacoes.Enabled = status;

            btnEditar.Enabled = !status;
            btnCancelar.Enabled = status;
            btnSalvar.Enabled = status;

            if (status == true)
            {
                btnEditar.ForeColor = System.Drawing.Color.Black;
                btnCancelar.ForeColor = System.Drawing.Color.White;
                btnSalvar.ForeColor = System.Drawing.Color.White;
            }
            if (status == false)
            {
                btnEditar.ForeColor = System.Drawing.Color.White;
                btnCancelar.ForeColor = System.Drawing.Color.Black;
                btnSalvar.ForeColor = System.Drawing.Color.Black;
            }


        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtCPF.Text))
            {
                Habilitar(true);
            }

        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Habilitar(false);
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                try
                {
                    if (FileUploadImagem.PostedFile != null && !string.IsNullOrEmpty(FileUploadImagem.PostedFile.FileName))
                    {
                        if (BLLUtilidades.ValidarExtensaoImagem(FileUploadImagem.PostedFile.FileName))
                        {
                            ImgDados = new byte[FileUploadImagem.PostedFile.ContentLength];
                            HttpPostedFile Imagem = FileUploadImagem.PostedFile;
                            ImgTipo = FileUploadImagem.PostedFile.ContentType.ToString();
                            Imagem.InputStream.Read(ImgDados, 0, (int)FileUploadImagem.PostedFile.ContentLength);

                            dtoCliente.ImagemPerfil = ImgDados;
                            dtoCliente.ImagemTipo = ImgTipo;
                        }
                        else
                        {
                            Mensagem.ExibirEmUP("Arquivo de imagem inválido!");
                        }
                    }

                    dtoEndereco = new DTOEndereco();

                    dtoEndereco.EnderecoID = enderecoID;
                    dtoEndereco.Rua = txtRua.Text;
                    dtoEndereco.Numero = txtNumero.Text;
                    dtoEndereco.Bairro = txtBairro.Text;
                    dtoEndereco.Complemento = txtComplemento.Text;
                    dtoEndereco.Cidade = txtCidade.Text;
                    dtoEndereco.Estado = Int32.Parse(ddlEstado.SelectedValue);
                    dtoEndereco.CEP = txtCEP.Text.Replace(".", "").Replace("-", "");

                    bllEndereco.Atualizar(dtoEndereco);

                    dtoCliente = new DTOCliente();

                    dtoCliente.ClienteID = clienteID;
                    dtoCliente.Nome = txtNome.Text;
                    dtoCliente.Sobrenome = txtSobrenome.Text;
                    dtoCliente.Sexo = Convert.ToChar(rblSexo.SelectedValue);
                    dtoCliente.CPF = txtCPF.Text.Replace(".", "").Replace("-", "");
                    dtoCliente.DataNascimento = Convert.ToDateTime(txtDataNascimento.Text);
                    dtoCliente.Telefone = txtTelefone.Text.Replace("(", "").Replace(")", "").Replace("-", "");
                    dtoCliente.Celular = txtCelular.Text.Replace("(", "").Replace(")", "").Replace("-", "");
                    dtoCliente.Email = txtEmail.Text.Replace(" ", "").ToLower();
                    dtoCliente.Login = txtLoginCad.Text;
                    dtoCliente.Informacoes = ckbInformacoes.Checked;
                    dtoCliente.RegistroWeb = true;
                    dtoCliente.EnderecoID = enderecoID;
                    dtoCliente.ImagemPerfil = ImgDados;
                    dtoCliente.ImagemTipo = ImgTipo;
                    dtoCliente.UserID = userID;

                    bllCliente.Atualizar(dtoCliente);

                    Mensagem.ExibirEmUP("Dados atualizados com sucesso!");
                    PreencherDados();
                    Habilitar(false);

                }
                catch (Exception)
                {
                    Mensagem.ExibirEmUP("Não foi possível atualizar os dados!");
                }
            }

        }

        protected void txtCEP_TextChanged(object sender, EventArgs e)
        {
            txtRua.Focus();
        }

        protected void CustomValidatorCPF_ServerValidate(object source, ServerValidateEventArgs args)
        {
            try
            {
                if (!BLLUtilidades.ValidarCPF(txtCPF.Text))
                {
                    args.IsValid = false;
                }

                args.IsValid = true;
            }
            catch (Exception)
            {
                throw;
            }
        }

    }
}